package com.atguigu.juc.interactive;

 /* 有一个初始值为零的变量，现有两个线程对该变量操作，
        * 实现一个线程对变量加1，实现一个线程对变量减1,交替来10轮*/

//老版本：使用synchronized + while + notifyAll


//空调资源类
class AirCondition{
    //定义一个初始值为的变量

    private int number = 0;
    //他应该有两个方法method，所以应该先定义一个加的方法和一个减的方法
    //加1方法
    public  synchronized void increment() throws InterruptedException {
        //判断
        while (number != 0){
            this.wait();
        }
        //干活
        System.out.println(Thread.currentThread().getName() + (++number));
        //通知
        this.notifyAll();
    }
    //减1方法
    public  synchronized void decrement() throws InterruptedException {
        //判断
        if (number != 1){
            this.wait();
        }
        //干活
        System.out.println(Thread.currentThread().getName() + (--number));
        //通知
        this.notifyAll();
    }
}


public class ProdConsumerDemo {
    //先创建一个main主线程，然后创建对象
    public static void main(String[] args) {

        AirCondition airCondition = new AirCondition();

        new Thread(()->{
            for (int i = 0; i < 10; i++) {
                try {
                    airCondition.increment();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"A--->").start();
        new Thread(()->{
            for (int i = 0; i < 10; i++) {
                try {
                    airCondition.decrement();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"B--->").start();

    }

}
